/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DescribeDedicatedClusterInstanceTypes response structure.
 * @class
 */
class DescribeDedicatedClusterInstanceTypesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of supported instance types
         * @type {Array.<DedicatedClusterInstanceType> || null}
         */
        this.DedicatedClusterInstanceTypeSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DedicatedClusterInstanceTypeSet) {
            this.DedicatedClusterInstanceTypeSet = new Array();
            for (let z in params.DedicatedClusterInstanceTypeSet) {
                let obj = new DedicatedClusterInstanceType();
                obj.deserialize(params.DedicatedClusterInstanceTypeSet[z]);
                this.DedicatedClusterInstanceTypeSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDedicatedClusters request structure.
 * @class
 */
class DescribeDedicatedClustersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query by one or more instance IDs. Example of instance ID: cluster-xxxxxxxx
         * @type {Array.<string> || null}
         */
        this.DedicatedClusterIds = null;

        /**
         * Filter by AZ name.
         * @type {Array.<string> || null}
         */
        this.Zones = null;

        /**
         * Filter by site id.
         * @type {Array.<string> || null}
         */
        this.SiteIds = null;

        /**
         * Filter by CDC life cycle.
         * @type {Array.<string> || null}
         */
        this.LifecycleStatuses = null;

        /**
         * Name of fuzzy matching CDC
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Offset, 0 by default For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default and can be up to 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterIds = 'DedicatedClusterIds' in params ? params.DedicatedClusterIds : null;
        this.Zones = 'Zones' in params ? params.Zones : null;
        this.SiteIds = 'SiteIds' in params ? params.SiteIds : null;
        this.LifecycleStatuses = 'LifecycleStatuses' in params ? params.LifecycleStatuses : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeDedicatedClusterTypes response structure.
 * @class
 */
class DescribeDedicatedClusterTypesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of CDC configurations
         * @type {Array.<DedicatedClusterType> || null}
         */
        this.DedicatedClusterTypeSet = null;

        /**
         * Number of records that meet the conditions
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DedicatedClusterTypeSet) {
            this.DedicatedClusterTypeSet = new Array();
            for (let z in params.DedicatedClusterTypeSet) {
                let obj = new DedicatedClusterType();
                obj.deserialize(params.DedicatedClusterTypeSet[z]);
                this.DedicatedClusterTypeSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * List of instance specifications supported by the CDC host
 * @class
 */
class DedicatedClusterInstanceType extends  AbstractModel {
    constructor(){
        super();

        /**
         * AZ
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Type name
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * NIC type, e.g., 25 represents a 25 GB NIC.
         * @type {number || null}
         */
        this.NetworkCard = null;

        /**
         * Number of CPU cores of instance, in cores
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Memory capacity of instance, in GB
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Instance family
         * @type {string || null}
         */
        this.InstanceFamily = null;

        /**
         * Type name
         * @type {string || null}
         */
        this.TypeName = null;

        /**
         * Local storage block count
         * @type {number || null}
         */
        this.StorageBlockAmount = null;

        /**
         * LAN bandwidth, in GB/s
         * @type {number || null}
         */
        this.InstanceBandwidth = null;

        /**
         * Network packet receiving/sending capacity, in 10,000 PPS
         * @type {number || null}
         */
        this.InstancePps = null;

        /**
         * Processor type
         * @type {string || null}
         */
        this.CpuType = null;

        /**
         * Number of GPUs of instance
         * @type {number || null}
         */
        this.Gpu = null;

        /**
         * Number of FPGAs of instance.
         * @type {number || null}
         */
        this.Fpga = null;

        /**
         * Type description
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Whether the instance is for sale? Value values: <br><li>SELL: Indicates that the instance is for sale. <br><li>SOLD_OUT: Indicates that the instance has been sold out.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.NetworkCard = 'NetworkCard' in params ? params.NetworkCard : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.InstanceFamily = 'InstanceFamily' in params ? params.InstanceFamily : null;
        this.TypeName = 'TypeName' in params ? params.TypeName : null;
        this.StorageBlockAmount = 'StorageBlockAmount' in params ? params.StorageBlockAmount : null;
        this.InstanceBandwidth = 'InstanceBandwidth' in params ? params.InstanceBandwidth : null;
        this.InstancePps = 'InstancePps' in params ? params.InstancePps : null;
        this.CpuType = 'CpuType' in params ? params.CpuType : null;
        this.Gpu = 'Gpu' in params ? params.Gpu : null;
        this.Fpga = 'Fpga' in params ? params.Fpga : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * CDC configurations
 * @class
 */
class DedicatedClusterType extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration id
         * @type {string || null}
         */
        this.DedicatedClusterTypeId = null;

        /**
         * Configuration description, corresponding to description 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Configuration name, corresponding to computing resource type
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Configuration creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * List of supported storage types
         * @type {Array.<string> || null}
         */
        this.SupportedStorageType = null;

        /**
         * Supported uplink switch transmission rate
         * @type {Array.<number> || null}
         */
        this.SupportedUplinkGiB = null;

        /**
         * List of supported instance families
         * @type {Array.<string> || null}
         */
        this.SupportedInstanceFamily = null;

        /**
         * Floor weight capacity (KG)
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * Power requirements (KW)
         * @type {number || null}
         */
        this.PowerDrawKva = null;

        /**
         * Displays the details of computing resource types, and does not display resources such as storage; corresponding to type
         * @type {string || null}
         */
        this.ComputeFormatDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterTypeId = 'DedicatedClusterTypeId' in params ? params.DedicatedClusterTypeId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SupportedStorageType = 'SupportedStorageType' in params ? params.SupportedStorageType : null;
        this.SupportedUplinkGiB = 'SupportedUplinkGiB' in params ? params.SupportedUplinkGiB : null;
        this.SupportedInstanceFamily = 'SupportedInstanceFamily' in params ? params.SupportedInstanceFamily : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.PowerDrawKva = 'PowerDrawKva' in params ? params.PowerDrawKva : null;
        this.ComputeFormatDesc = 'ComputeFormatDesc' in params ? params.ComputeFormatDesc : null;

    }
}

/**
 * DeleteSites request structure.
 * @class
 */
class DeleteSitesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of site ids to be deleted
         * @type {Array.<string> || null}
         */
        this.SiteIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteIds = 'SiteIds' in params ? params.SiteIds : null;

    }
}

/**
 * Used to add COS information on the purchase page.
 * @class
 */
class CosInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS size, in TB
         * @type {number || null}
         */
        this.Size = null;

        /**
         * COS type, COS by default
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * AZ information
 * @class
 */
class ZoneInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * AZ name
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * AZ description
         * @type {string || null}
         */
        this.ZoneName = null;

        /**
         * AZ ID
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * AZ status: AVAILABLE or UNAVAILABLE AVAILABLE means the AZ is available while UNAVAILABLE means the AZ is unavailable.
         * @type {string || null}
         */
        this.ZoneState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.ZoneName = 'ZoneName' in params ? params.ZoneName : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.ZoneState = 'ZoneState' in params ? params.ZoneState : null;

    }
}

/**
 * DescribeDedicatedClusterOverview response structure.
 * @class
 */
class DescribeDedicatedClusterOverviewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of CVMs
         * @type {number || null}
         */
        this.CvmCount = null;

        /**
         * Number of hosts
         * @type {number || null}
         */
        this.HostCount = null;

        /**
         * VPN channel status 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.VpnConnectionState = null;

        /**
         * VPN gateway monitoring data 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {VpngwBandwidthData || null}
         */
        this.VpngwBandwidthData = null;

        /**
         * Local gateway information 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {LocalNetInfo || null}
         */
        this.LocalNetInfo = null;

        /**
         * VPN gateway channel monitoring data 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<VpngwBandwidthData> || null}
         */
        this.VpnConnectionBandwidthData = null;

        /**
         * 
         * @type {Array.<HostDetailInfo> || null}
         */
        this.HostDetailInfo = null;

        /**
         * 
         * @type {number || null}
         */
        this.HostStandbyCount = null;

        /**
         * 
         * @type {number || null}
         */
        this.HostNormalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CvmCount = 'CvmCount' in params ? params.CvmCount : null;
        this.HostCount = 'HostCount' in params ? params.HostCount : null;
        this.VpnConnectionState = 'VpnConnectionState' in params ? params.VpnConnectionState : null;

        if (params.VpngwBandwidthData) {
            let obj = new VpngwBandwidthData();
            obj.deserialize(params.VpngwBandwidthData)
            this.VpngwBandwidthData = obj;
        }

        if (params.LocalNetInfo) {
            let obj = new LocalNetInfo();
            obj.deserialize(params.LocalNetInfo)
            this.LocalNetInfo = obj;
        }

        if (params.VpnConnectionBandwidthData) {
            this.VpnConnectionBandwidthData = new Array();
            for (let z in params.VpnConnectionBandwidthData) {
                let obj = new VpngwBandwidthData();
                obj.deserialize(params.VpnConnectionBandwidthData[z]);
                this.VpnConnectionBandwidthData.push(obj);
            }
        }

        if (params.HostDetailInfo) {
            this.HostDetailInfo = new Array();
            for (let z in params.HostDetailInfo) {
                let obj = new HostDetailInfo();
                obj.deserialize(params.HostDetailInfo[z]);
                this.HostDetailInfo.push(obj);
            }
        }
        this.HostStandbyCount = 'HostStandbyCount' in params ? params.HostStandbyCount : null;
        this.HostNormalCount = 'HostNormalCount' in params ? params.HostNormalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSites request structure.
 * @class
 */
class DescribeSitesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter by site id.
         * @type {Array.<string> || null}
         */
        this.SiteIds = null;

        /**
         * Name of fuzzy matching site
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Offset, 0 by default For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default and can be up to 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteIds = 'SiteIds' in params ? params.SiteIds : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CDC host details
 * @class
 */
class HostInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Host IP
         * @type {string || null}
         */
        this.HostIp = null;

        /**
         * Cloud service type
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Host running status
         * @type {string || null}
         */
        this.HostStatus = null;

        /**
         * Host type
         * @type {string || null}
         */
        this.HostType = null;

        /**
         * Number of available CPUs
         * @type {number || null}
         */
        this.CpuAvailable = null;

        /**
         * Total CPUs
         * @type {number || null}
         */
        this.CpuTotal = null;

        /**
         * Available memories
         * @type {number || null}
         */
        this.MemAvailable = null;

        /**
         * Total memories
         * @type {number || null}
         */
        this.MemTotal = null;

        /**
         * Running time
         * @type {string || null}
         */
        this.RunTime = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Host id 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.HostId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HostIp = 'HostIp' in params ? params.HostIp : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.HostStatus = 'HostStatus' in params ? params.HostStatus : null;
        this.HostType = 'HostType' in params ? params.HostType : null;
        this.CpuAvailable = 'CpuAvailable' in params ? params.CpuAvailable : null;
        this.CpuTotal = 'CpuTotal' in params ? params.CpuTotal : null;
        this.MemAvailable = 'MemAvailable' in params ? params.MemAvailable : null;
        this.MemTotal = 'MemTotal' in params ? params.MemTotal : null;
        this.RunTime = 'RunTime' in params ? params.RunTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.HostId = 'HostId' in params ? params.HostId : null;

    }
}

/**
 * CreateSite response structure.
 * @class
 */
class CreateSiteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Created Site id
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDedicatedSupportedZones response structure.
 * @class
 */
class DescribeDedicatedSupportedZonesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of supported AZs
         * @type {Array.<RegionZoneInfo> || null}
         */
        this.ZoneSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ZoneSet) {
            this.ZoneSet = new Array();
            for (let z in params.ZoneSet) {
                let obj = new RegionZoneInfo();
                obj.deserialize(params.ZoneSet[z]);
                this.ZoneSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySiteInfo response structure.
 * @class
 */
class ModifySiteInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDedicatedClusterOrder request structure.
 * @class
 */
class CreateDedicatedClusterOrderRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Array of order-related CDC types
         * @type {Array.<DedicatedClusterTypeInfo> || null}
         */
        this.DedicatedClusterTypes = null;

        /**
         * Order-related COS storage information
         * @type {CosInfo || null}
         */
        this.CosInfo = null;

        /**
         * Order-related CBS storage information
         * @type {CbsInfo || null}
         */
        this.CbsInfo = null;

        /**
         * Purchase source, cloudApi by default
         * @type {string || null}
         */
        this.PurchaseSource = null;

        /**
         * DedicatedClusterOrderId needs to be submitted when API is invoked to submit an order.
         * @type {string || null}
         */
        this.DedicatedClusterOrderId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

        if (params.DedicatedClusterTypes) {
            this.DedicatedClusterTypes = new Array();
            for (let z in params.DedicatedClusterTypes) {
                let obj = new DedicatedClusterTypeInfo();
                obj.deserialize(params.DedicatedClusterTypes[z]);
                this.DedicatedClusterTypes.push(obj);
            }
        }

        if (params.CosInfo) {
            let obj = new CosInfo();
            obj.deserialize(params.CosInfo)
            this.CosInfo = obj;
        }

        if (params.CbsInfo) {
            let obj = new CbsInfo();
            obj.deserialize(params.CbsInfo)
            this.CbsInfo = obj;
        }
        this.PurchaseSource = 'PurchaseSource' in params ? params.PurchaseSource : null;
        this.DedicatedClusterOrderId = 'DedicatedClusterOrderId' in params ? params.DedicatedClusterOrderId : null;

    }
}

/**
 * ModifyOrderStatus request structure.
 * @class
 */
class ModifyOrderStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status to be updated
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Large order ID
         * @type {string || null}
         */
        this.DedicatedClusterOrderId = null;

        /**
         * Small order ID
         * @type {Array.<string> || null}
         */
        this.SubOrderIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.DedicatedClusterOrderId = 'DedicatedClusterOrderId' in params ? params.DedicatedClusterOrderId : null;
        this.SubOrderIds = 'SubOrderIds' in params ? params.SubOrderIds : null;

    }
}

/**
 * CDC sub-order
 * @class
 */
class DedicatedClusterOrderItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC type id
         * @type {string || null}
         */
        this.DedicatedClusterTypeId = null;

        /**
         * List of supported storage types
         * @type {Array.<string> || null}
         */
        this.SupportedStorageType = null;

        /**
         * Supported uplink switch transmission rate (GiB)
         * @type {Array.<number> || null}
         */
        this.SupportedUplinkSpeed = null;

        /**
         * List of supported instance families
         * @type {Array.<string> || null}
         */
        this.SupportedInstanceFamily = null;

        /**
         * Floor weight capacity (KG)
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * Power requirements (KW)
         * @type {number || null}
         */
        this.PowerDraw = null;

        /**
         * Order status
         * @type {string || null}
         */
        this.SubOrderStatus = null;

        /**
         * Order creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Sub-order ID
         * @type {string || null}
         */
        this.SubOrderId = null;

        /**
         * Number of linked cluster types
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Brief description of type
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Detailed description of type
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Number of CPUs
         * @type {number || null}
         */
        this.TotalCpu = null;

        /**
         * Number of memories
         * @type {number || null}
         */
        this.TotalMem = null;

        /**
         * Total GPUs
         * @type {number || null}
         */
        this.TotalGpu = null;

        /**
         * English type name
         * @type {string || null}
         */
        this.TypeName = null;

        /**
         * Type display 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.ComputeFormat = null;

        /**
         * Type family 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.TypeFamily = null;

        /**
         * 0 for unpaid, 1 for paid 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.SubOrderPayStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterTypeId = 'DedicatedClusterTypeId' in params ? params.DedicatedClusterTypeId : null;
        this.SupportedStorageType = 'SupportedStorageType' in params ? params.SupportedStorageType : null;
        this.SupportedUplinkSpeed = 'SupportedUplinkSpeed' in params ? params.SupportedUplinkSpeed : null;
        this.SupportedInstanceFamily = 'SupportedInstanceFamily' in params ? params.SupportedInstanceFamily : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.PowerDraw = 'PowerDraw' in params ? params.PowerDraw : null;
        this.SubOrderStatus = 'SubOrderStatus' in params ? params.SubOrderStatus : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SubOrderId = 'SubOrderId' in params ? params.SubOrderId : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.TotalCpu = 'TotalCpu' in params ? params.TotalCpu : null;
        this.TotalMem = 'TotalMem' in params ? params.TotalMem : null;
        this.TotalGpu = 'TotalGpu' in params ? params.TotalGpu : null;
        this.TypeName = 'TypeName' in params ? params.TypeName : null;
        this.ComputeFormat = 'ComputeFormat' in params ? params.ComputeFormat : null;
        this.TypeFamily = 'TypeFamily' in params ? params.TypeFamily : null;
        this.SubOrderPayStatus = 'SubOrderPayStatus' in params ? params.SubOrderPayStatus : null;

    }
}

/**
 * CreateSite request structure.
 * @class
 */
class CreateSiteRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Site name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Country where the site is located
         * @type {string || null}
         */
        this.Country = null;

        /**
         * Province where the site is located
         * @type {string || null}
         */
        this.Province = null;

        /**
         * City where the site is located
         * @type {string || null}
         */
        this.City = null;

        /**
         * Detailed address of the site
         * @type {string || null}
         */
        this.AddressLine = null;

        /**
         * Site description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Note
         * @type {string || null}
         */
        this.Note = null;

        /**
         * You are using optical fiber type to connect the CDC device to the network Single-mode or multi-mode fibers are available.
         * @type {string || null}
         */
        this.FiberType = null;

        /**
         * Optical standard used to connect the CDC device to the network This field depends on the uplink speed, optical fiber type, and distance to upstream equipment.
         * @type {string || null}
         */
        this.OpticalStandard = null;

        /**
         * Type of power connector
         * @type {string || null}
         */
        this.PowerConnectors = null;

        /**
         * Whether power is supplied from above or below the rack
         * @type {string || null}
         */
        this.PowerFeedDrop = null;

        /**
         * Maximum weight capacity (KG)
         * @type {number || null}
         */
        this.MaxWeight = null;

        /**
         * Power consumption (KW)
         * @type {number || null}
         */
        this.PowerDrawKva = null;

        /**
         * Uplink speed from the network to Tencent Cloud Region
         * @type {number || null}
         */
        this.UplinkSpeedGbps = null;

        /**
         * Number of uplinks used by each CDC device (2 devices per rack) when connected to the network
         * @type {number || null}
         */
        this.UplinkCount = null;

        /**
         * Whether the following environmental conditions are met: 
1. There are no material requirements or the acceptance standard on site that will affect the delivery and installation of the CDC device. 
2. The following conditions are met for finalized rack positions: 
Temperature ranges from 41 to 104°F (5 to 40°C). 
Humidity ranges from 10°F (-12°C) to 70°F (21°C) and relative humidity ranges from 8% RH to 80% RH. 
Air flows from front to back at the rack position and there is sufficient air in CFM (cubic feet per minute). The air quantity in CFM must be 145.8 times the power consumption (in KVA) of CDC.
         * @type {boolean || null}
         */
        this.ConditionRequirement = null;

        /**
         * Whether the following dimension conditions are met: 
Your loading dock can accommodate one rack container (H x W x D = 94" x 54" x 48"). 
You can provide a clear route from the delivery point of your rack (H x W x D = 80" x 24" x 48") to its final installation location. You should consider platforms, corridors, doors, turns, ramps, freight elevators as well as other access restrictions when measuring the depth. 
There shall be a 48" or greater front clearance and a 24" or greater rear clearance where the CDC is finally installed.
         * @type {boolean || null}
         */
        this.DimensionRequirement = null;

        /**
         * Whether redundant upstream equipment (switch or router) is provided so that both network devices can be connected to the network.
         * @type {boolean || null}
         */
        this.RedundantNetworking = null;

        /**
         * Postal code of the site area
         * @type {number || null}
         */
        this.PostalCode = null;

        /**
         * Detailed address of the site area (to be added)
         * @type {string || null}
         */
        this.OptionalAddressLine = null;

        /**
         * Whether you need help from Tencent Cloud for rack installation?
         * @type {boolean || null}
         */
        this.NeedHelp = null;

        /**
         * Whether there is power redundancy?
         * @type {boolean || null}
         */
        this.RedundantPower = null;

        /**
         * Whether there is an upstream circuit breaker?
         * @type {boolean || null}
         */
        this.BreakerRequirement = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Country = 'Country' in params ? params.Country : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;
        this.AddressLine = 'AddressLine' in params ? params.AddressLine : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.FiberType = 'FiberType' in params ? params.FiberType : null;
        this.OpticalStandard = 'OpticalStandard' in params ? params.OpticalStandard : null;
        this.PowerConnectors = 'PowerConnectors' in params ? params.PowerConnectors : null;
        this.PowerFeedDrop = 'PowerFeedDrop' in params ? params.PowerFeedDrop : null;
        this.MaxWeight = 'MaxWeight' in params ? params.MaxWeight : null;
        this.PowerDrawKva = 'PowerDrawKva' in params ? params.PowerDrawKva : null;
        this.UplinkSpeedGbps = 'UplinkSpeedGbps' in params ? params.UplinkSpeedGbps : null;
        this.UplinkCount = 'UplinkCount' in params ? params.UplinkCount : null;
        this.ConditionRequirement = 'ConditionRequirement' in params ? params.ConditionRequirement : null;
        this.DimensionRequirement = 'DimensionRequirement' in params ? params.DimensionRequirement : null;
        this.RedundantNetworking = 'RedundantNetworking' in params ? params.RedundantNetworking : null;
        this.PostalCode = 'PostalCode' in params ? params.PostalCode : null;
        this.OptionalAddressLine = 'OptionalAddressLine' in params ? params.OptionalAddressLine : null;
        this.NeedHelp = 'NeedHelp' in params ? params.NeedHelp : null;
        this.RedundantPower = 'RedundantPower' in params ? params.RedundantPower : null;
        this.BreakerRequirement = 'BreakerRequirement' in params ? params.BreakerRequirement : null;

    }
}

/**
 * DescribeDedicatedSupportedZones request structure.
 * @class
 */
class DescribeDedicatedSupportedZonesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of input regions
         * @type {Array.<number> || null}
         */
        this.Regions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Regions = 'Regions' in params ? params.Regions : null;

    }
}

/**
 * DedicatedClusterType => (Id, Count)
 * @class
 */
class DedicatedClusterTypeInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster type id
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Cluster type count
         * @type {number || null}
         */
        this.Count = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Count = 'Count' in params ? params.Count : null;

    }
}

/**
 * ModifyOrderStatus response structure.
 * @class
 */
class ModifyOrderStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Inbound bandwidth data
 * @class
 */
class InBandwidth extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Timestamps = null;

        /**
         * Time-specific value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamps = 'Timestamps' in params ? params.Timestamps : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * DescribeDedicatedClusterCosCapacity request structure.
 * @class
 */
class DescribeDedicatedClusterCosCapacityRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queried CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

    }
}

/**
 * DescribeSites response structure.
 * @class
 */
class DescribeSitesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of sites that meet the query conditions
         * @type {Array.<Site> || null}
         */
        this.SiteSet = null;

        /**
         * Number of sites that meet the conditions
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SiteSet) {
            this.SiteSet = new Array();
            for (let z in params.SiteSet) {
                let obj = new Site();
                obj.deserialize(params.SiteSet[z]);
                this.SiteSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSitesDetail request structure.
 * @class
 */
class DescribeSitesDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter by site id.
         * @type {Array.<string> || null}
         */
        this.SiteIds = null;

        /**
         * Offset, 0 by default For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default and can be up to 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Fuzzy match by site name.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteIds = 'SiteIds' in params ? params.SiteIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * Time-stamped detailed data
 * @class
 */
class DetailData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Timestamps = null;

        /**
         * Corresponding value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamps = 'Timestamps' in params ? params.Timestamps : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * CDC order
 * @class
 */
class DedicatedClusterOrder extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * CDC type id (moved to the next level, obsolete and will be deleted later)
         * @type {string || null}
         */
        this.DedicatedClusterTypeId = null;

        /**
         * List of supported storage types (moved to the next level, obsolete and will be deleted later)
         * @type {Array.<string> || null}
         */
        this.SupportedStorageType = null;

        /**
         * Supported uplink switch transmission rate (GiB) (moved to the next level, obsolete and will be deleted later)
         * @type {Array.<number> || null}
         */
        this.SupportedUplinkSpeed = null;

        /**
         * List of supported instance families (moved to the next level, obsolete and will be deleted later)
         * @type {Array.<string> || null}
         */
        this.SupportedInstanceFamily = null;

        /**
         * Floor weight capacity (KG)
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * Power requirements (KW)
         * @type {number || null}
         */
        this.PowerDraw = null;

        /**
         * Order status
         * @type {string || null}
         */
        this.OrderStatus = null;

        /**
         * Order creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Large order ID
         * @type {string || null}
         */
        this.DedicatedClusterOrderId = null;

        /**
         * Order type, CREATE or EXTEND
         * @type {string || null}
         */
        this.Action = null;

        /**
         * List of sub-order details 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<DedicatedClusterOrderItem> || null}
         */
        this.DedicatedClusterOrderItems = null;

        /**
         * CPU value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * MEM value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.Mem = null;

        /**
         * GPU value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.Gpu = null;

        /**
         * 0 for unpaid, 1 for paid 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.PayStatus = null;

        /**
         * Payment method: lump-sum, monthly, and annually 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.PayType = null;

        /**
         * Unit of purchased period 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Purchased period 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Order type 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.OrderType = null;

        /**
         * 
         * @type {string || null}
         */
        this.CheckStatus = null;

        /**
         * 
         * @type {string || null}
         */
        this.DeliverExpectTime = null;

        /**
         * 
         * @type {string || null}
         */
        this.DeliverFinishTime = null;

        /**
         * 
         * @type {string || null}
         */
        this.CheckExpectTime = null;

        /**
         * 
         * @type {string || null}
         */
        this.CheckFinishTime = null;

        /**
         * 
         * @type {string || null}
         */
        this.OrderSLA = null;

        /**
         * 
         * @type {string || null}
         */
        this.OrderPayPlan = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.DedicatedClusterTypeId = 'DedicatedClusterTypeId' in params ? params.DedicatedClusterTypeId : null;
        this.SupportedStorageType = 'SupportedStorageType' in params ? params.SupportedStorageType : null;
        this.SupportedUplinkSpeed = 'SupportedUplinkSpeed' in params ? params.SupportedUplinkSpeed : null;
        this.SupportedInstanceFamily = 'SupportedInstanceFamily' in params ? params.SupportedInstanceFamily : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.PowerDraw = 'PowerDraw' in params ? params.PowerDraw : null;
        this.OrderStatus = 'OrderStatus' in params ? params.OrderStatus : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.DedicatedClusterOrderId = 'DedicatedClusterOrderId' in params ? params.DedicatedClusterOrderId : null;
        this.Action = 'Action' in params ? params.Action : null;

        if (params.DedicatedClusterOrderItems) {
            this.DedicatedClusterOrderItems = new Array();
            for (let z in params.DedicatedClusterOrderItems) {
                let obj = new DedicatedClusterOrderItem();
                obj.deserialize(params.DedicatedClusterOrderItems[z]);
                this.DedicatedClusterOrderItems.push(obj);
            }
        }
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Mem = 'Mem' in params ? params.Mem : null;
        this.Gpu = 'Gpu' in params ? params.Gpu : null;
        this.PayStatus = 'PayStatus' in params ? params.PayStatus : null;
        this.PayType = 'PayType' in params ? params.PayType : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.OrderType = 'OrderType' in params ? params.OrderType : null;
        this.CheckStatus = 'CheckStatus' in params ? params.CheckStatus : null;
        this.DeliverExpectTime = 'DeliverExpectTime' in params ? params.DeliverExpectTime : null;
        this.DeliverFinishTime = 'DeliverFinishTime' in params ? params.DeliverFinishTime : null;
        this.CheckExpectTime = 'CheckExpectTime' in params ? params.CheckExpectTime : null;
        this.CheckFinishTime = 'CheckFinishTime' in params ? params.CheckFinishTime : null;
        this.OrderSLA = 'OrderSLA' in params ? params.OrderSLA : null;
        this.OrderPayPlan = 'OrderPayPlan' in params ? params.OrderPayPlan : null;

    }
}

/**
 * ModifyDedicatedClusterInfo request structure.
 * @class
 */
class ModifyDedicatedClusterInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC ID
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * New cluster name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * New cluster AZ
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * New cluster description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Site where the cluster resides
         * @type {string || null}
         */
        this.SiteId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.SiteId = 'SiteId' in params ? params.SiteId : null;

    }
}

/**
 * DescribeDedicatedClusterHosts request structure.
 * @class
 */
class DescribeDedicatedClusterHostsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Offset, 0 by default
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateDedicatedClusterOrder response structure.
 * @class
 */
class CreateDedicatedClusterOrderResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC order id 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.DedicatedClusterOrderId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterOrderId = 'DedicatedClusterOrderId' in params ? params.DedicatedClusterOrderId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDedicatedClusterCosCapacity response structure.
 * @class
 */
class DescribeDedicatedClusterCosCapacityResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster COS capacity, in GB
         * @type {CosCapacity || null}
         */
        this.CosCapacity = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CosCapacity) {
            let obj = new CosCapacity();
            obj.deserialize(params.CosCapacity)
            this.CosCapacity = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of RegionZoneInfo
 * @class
 */
class RegionZoneInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region id
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * ZoneInfo array
         * @type {Array.<ZoneInfo> || null}
         */
        this.Zones = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

        if (params.Zones) {
            this.Zones = new Array();
            for (let z in params.Zones) {
                let obj = new ZoneInfo();
                obj.deserialize(params.Zones[z]);
                this.Zones.push(obj);
            }
        }

    }
}

/**
 * CreateDedicatedCluster response structure.
 * @class
 */
class CreateDedicatedClusterResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Created CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CDC list
 * @class
 */
class DedicatedCluster extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC id, e.g., cluster-xxxxx.
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Name of AZ to which the CDC belongs
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * CDC description 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * CDC name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Life cycle of the CDC, e.g., PENDING.
         * @type {string || null}
         */
        this.LifecycleStatus = null;

        /**
         * Creation time of the CDC
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Site id to which the CDC belongs
         * @type {string || null}
         */
        this.SiteId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.LifecycleStatus = 'LifecycleStatus' in params ? params.LifecycleStatus : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SiteId = 'SiteId' in params ? params.SiteId : null;

    }
}

/**
 * DescribeSitesDetail response structure.
 * @class
 */
class DescribeSitesDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Site details
         * @type {Array.<SiteDetail> || null}
         */
        this.SiteDetailSet = null;

        /**
         * Total number of sites that meet the conditions
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SiteDetailSet) {
            this.SiteDetailSet = new Array();
            for (let z in params.SiteDetailSet) {
                let obj = new SiteDetail();
                obj.deserialize(params.SiteDetailSet[z]);
                this.SiteDetailSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDedicatedClusterOrders request structure.
 * @class
 */
class DescribeDedicatedClusterOrdersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter by CDC id.
         * @type {Array.<string> || null}
         */
        this.DedicatedClusterIds = null;

        /**
         * Filter by CDC order id.
         * @type {string || null}
         */
        this.DedicatedClusterOrderIds = null;

        /**
         * Offset, 0 by default For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default and can be up to 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * The order status is the filter condition: PENDING INCONSTRUCTION DELIVERING DELIVERED EXPIRED CANCELLED OFFLINE
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The order type is the filter condition: CREATE EXTEND
         * @type {string || null}
         */
        this.ActionType = null;

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.OrderTypes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterIds = 'DedicatedClusterIds' in params ? params.DedicatedClusterIds : null;
        this.DedicatedClusterOrderIds = 'DedicatedClusterOrderIds' in params ? params.DedicatedClusterOrderIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ActionType = 'ActionType' in params ? params.ActionType : null;
        this.OrderTypes = 'OrderTypes' in params ? params.OrderTypes : null;

    }
}

/**
 * DescribeDedicatedClusters response structure.
 * @class
 */
class DescribeDedicatedClustersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of CDCs that meet the conditions
         * @type {Array.<DedicatedCluster> || null}
         */
        this.DedicatedClusterSet = null;

        /**
         * Total number of CDCs that meet the conditions
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DedicatedClusterSet) {
            this.DedicatedClusterSet = new Array();
            for (let z in params.DedicatedClusterSet) {
                let obj = new DedicatedCluster();
                obj.deserialize(params.DedicatedClusterSet[z]);
                this.DedicatedClusterSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Statistic information of hosts in the CDC
 * @class
 */
class HostStatistic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Host type
         * @type {string || null}
         */
        this.HostType = null;

        /**
         * Host model family
         * @type {string || null}
         */
        this.HostFamily = null;

        /**
         * Number of CPU cores of host, in cores
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Host memory, in GB
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Number of hosts of this type
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Average CPU load percentage 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.CpuAverage = null;

        /**
         * Average memory usage percentage 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.MemAverage = null;

        /**
         * Average network traffic 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.NetAverage = null;

        /**
         * Detailed CPU monitoring data 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {DetailData || null}
         */
        this.CpuDetailData = null;

        /**
         * Memory details 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {DetailData || null}
         */
        this.MemDetailData = null;

        /**
         * Network rate details 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {DetailData || null}
         */
        this.NetRateDetailData = null;

        /**
         * Network packet details 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {DetailData || null}
         */
        this.NetPacketDetailData = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HostType = 'HostType' in params ? params.HostType : null;
        this.HostFamily = 'HostFamily' in params ? params.HostFamily : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.CpuAverage = 'CpuAverage' in params ? params.CpuAverage : null;
        this.MemAverage = 'MemAverage' in params ? params.MemAverage : null;
        this.NetAverage = 'NetAverage' in params ? params.NetAverage : null;

        if (params.CpuDetailData) {
            let obj = new DetailData();
            obj.deserialize(params.CpuDetailData)
            this.CpuDetailData = obj;
        }

        if (params.MemDetailData) {
            let obj = new DetailData();
            obj.deserialize(params.MemDetailData)
            this.MemDetailData = obj;
        }

        if (params.NetRateDetailData) {
            let obj = new DetailData();
            obj.deserialize(params.NetRateDetailData)
            this.NetRateDetailData = obj;
        }

        if (params.NetPacketDetailData) {
            let obj = new DetailData();
            obj.deserialize(params.NetPacketDetailData)
            this.NetPacketDetailData = obj;
        }

    }
}

/**
 * 
 * @class
 */
class HostDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {string || null}
         */
        this.HostTypeFamily = null;

        /**
         * 
         * @type {number || null}
         */
        this.CpuTotal = null;

        /**
         * 
         * @type {number || null}
         */
        this.CpuAvailable = null;

        /**
         * 
         * @type {number || null}
         */
        this.MemTotal = null;

        /**
         * 
         * @type {number || null}
         */
        this.MemAvailable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HostTypeFamily = 'HostTypeFamily' in params ? params.HostTypeFamily : null;
        this.CpuTotal = 'CpuTotal' in params ? params.CpuTotal : null;
        this.CpuAvailable = 'CpuAvailable' in params ? params.CpuAvailable : null;
        this.MemTotal = 'MemTotal' in params ? params.MemTotal : null;
        this.MemAvailable = 'MemAvailable' in params ? params.MemAvailable : null;

    }
}

/**
 * Information about purchased CBS
 * @class
 */
class CbsInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * CBS storage size, in TB
         * @type {number || null}
         */
        this.Size = null;

        /**
         * CBS storage type, SSD by default
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * ModifySiteDeviceInfo response structure.
 * @class
 */
class ModifySiteDeviceInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDedicatedCluster request structure.
 * @class
 */
class CreateDedicatedClusterRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SiteId to which the CDC belongs
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * CDC name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * AZ to which the CDC belongs
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * CDC description
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DescribeDedicatedClusterHosts response structure.
 * @class
 */
class DescribeDedicatedClusterHostsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Host information 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<HostInfo> || null}
         */
        this.HostInfoSet = null;

        /**
         * Total number of hosts
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HostInfoSet) {
            this.HostInfoSet = new Array();
            for (let z in params.HostInfoSet) {
                let obj = new HostInfo();
                obj.deserialize(params.HostInfoSet[z]);
                this.HostInfoSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Local network information
 * @class
 */
class LocalNetInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Network id 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Routing information 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.BGPRoute = null;

        /**
         * Local IP 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.LocalIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.BGPRoute = 'BGPRoute' in params ? params.BGPRoute : null;
        this.LocalIp = 'LocalIp' in params ? params.LocalIp : null;

    }
}

/**
 * DescribeDedicatedClusterInstanceTypes request structure.
 * @class
 */
class DescribeDedicatedClusterInstanceTypesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queried CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

    }
}

/**
 * ModifyDedicatedClusterInfo response structure.
 * @class
 */
class ModifyDedicatedClusterInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySiteInfo request structure.
 * @class
 */
class ModifySiteInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Equipment room ID
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * Site name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Site description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Note
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Country where the site is located
         * @type {string || null}
         */
        this.Country = null;

        /**
         * Province where the site is located
         * @type {string || null}
         */
        this.Province = null;

        /**
         * City where the site is located
         * @type {string || null}
         */
        this.City = null;

        /**
         * Postal code of the site area
         * @type {string || null}
         */
        this.PostalCode = null;

        /**
         * Detailed address of the site
         * @type {string || null}
         */
        this.AddressLine = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Country = 'Country' in params ? params.Country : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;
        this.PostalCode = 'PostalCode' in params ? params.PostalCode : null;
        this.AddressLine = 'AddressLine' in params ? params.AddressLine : null;

    }
}

/**
 * Site details
 * @class
 */
class SiteDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Site id
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * Site name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Site description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Site creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Optical fiber type
         * @type {string || null}
         */
        this.FiberType = null;

        /**
         * Uplink speed from the network to Tencent Cloud Region
         * @type {number || null}
         */
        this.UplinkSpeedGbps = null;

        /**
         * Number of uplinks used by each CDC device (2 devices per rack) when connected to the network
         * @type {number || null}
         */
        this.UplinkCount = null;

        /**
         * Optical standard used to connect the CDC device to the network
         * @type {string || null}
         */
        this.OpticalStandard = null;

        /**
         * Whether redundant upstream equipment (switch or router) is provided so that both network devices can be connected to the network.
         * @type {boolean || null}
         */
        this.RedundantNetworking = null;

        /**
         * Type of power connector
         * @type {string || null}
         */
        this.PowerConnectors = null;

        /**
         * Whether power is supplied from above or below the rack
         * @type {string || null}
         */
        this.PowerFeedDrop = null;

        /**
         * Power consumption (KW)
         * @type {number || null}
         */
        this.PowerDrawKva = null;

        /**
         * Whether the following environmental conditions are met: 
1. There are no material requirements or the acceptance standard on site that will affect the delivery and installation of the CDC device. 
2. The following conditions are met for finalized rack positions: 
Temperature ranges from 41 to 104°F (5 to 40°C). 
Humidity ranges from 10°F (-12°C) to 70°F (21°C) and relative humidity ranges from 8% RH to 80% RH. 
Air flows from front to back at the rack position and there is sufficient air in CFM (cubic feet per minute). The air quantity in CFM must be 145.8 times the power consumption (in KVA) of CDC.
         * @type {boolean || null}
         */
        this.ConditionRequirement = null;

        /**
         * Whether the following dimension conditions are met: 
Your loading dock can accommodate one rack container (H x W x D = 94" x 54" x 48"). 
You can provide a clear route from the delivery point of your rack (H x W x D = 80" x 24" x 48") to its final installation location. You should consider platforms, corridors, doors, turns, ramps, freight elevators as well as other access restrictions when measuring the depth. 
There shall be a 48" or greater front clearance and a 24" or greater rear clearance where the CDC is finally installed.
         * @type {boolean || null}
         */
        this.DimensionRequirement = null;

        /**
         * Maximum weight capacity (KG)
         * @type {number || null}
         */
        this.MaxWeight = null;

        /**
         * Site address
         * @type {string || null}
         */
        this.AddressLine = null;

        /**
         * Detailed address of the site area (to be added)
         * @type {string || null}
         */
        this.OptionalAddressLine = null;

        /**
         * Whether you need help from Tencent Cloud for rack installation?
         * @type {boolean || null}
         */
        this.NeedHelp = null;

        /**
         * Whether there is an upstream circuit breaker?
         * @type {boolean || null}
         */
        this.BreakerRequirement = null;

        /**
         * Whether there is power redundancy?
         * @type {boolean || null}
         */
        this.RedundantPower = null;

        /**
         * Country where the site is located
         * @type {string || null}
         */
        this.Country = null;

        /**
         * Province where the site is located
         * @type {string || null}
         */
        this.Province = null;

        /**
         * City where the site is located
         * @type {string || null}
         */
        this.City = null;

        /**
         * Postal code of the site area
         * @type {number || null}
         */
        this.PostalCode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.FiberType = 'FiberType' in params ? params.FiberType : null;
        this.UplinkSpeedGbps = 'UplinkSpeedGbps' in params ? params.UplinkSpeedGbps : null;
        this.UplinkCount = 'UplinkCount' in params ? params.UplinkCount : null;
        this.OpticalStandard = 'OpticalStandard' in params ? params.OpticalStandard : null;
        this.RedundantNetworking = 'RedundantNetworking' in params ? params.RedundantNetworking : null;
        this.PowerConnectors = 'PowerConnectors' in params ? params.PowerConnectors : null;
        this.PowerFeedDrop = 'PowerFeedDrop' in params ? params.PowerFeedDrop : null;
        this.PowerDrawKva = 'PowerDrawKva' in params ? params.PowerDrawKva : null;
        this.ConditionRequirement = 'ConditionRequirement' in params ? params.ConditionRequirement : null;
        this.DimensionRequirement = 'DimensionRequirement' in params ? params.DimensionRequirement : null;
        this.MaxWeight = 'MaxWeight' in params ? params.MaxWeight : null;
        this.AddressLine = 'AddressLine' in params ? params.AddressLine : null;
        this.OptionalAddressLine = 'OptionalAddressLine' in params ? params.OptionalAddressLine : null;
        this.NeedHelp = 'NeedHelp' in params ? params.NeedHelp : null;
        this.BreakerRequirement = 'BreakerRequirement' in params ? params.BreakerRequirement : null;
        this.RedundantPower = 'RedundantPower' in params ? params.RedundantPower : null;
        this.Country = 'Country' in params ? params.Country : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;
        this.PostalCode = 'PostalCode' in params ? params.PostalCode : null;

    }
}

/**
 * DeleteSites response structure.
 * @class
 */
class DeleteSitesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Capacity of COS in CDC
 * @class
 */
class CosCapacity extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total capacity, in GB
         * @type {number || null}
         */
        this.TotalCapacity = null;

        /**
         * Available capacity, in GB
         * @type {number || null}
         */
        this.TotalFreeCapacity = null;

        /**
         * Used capacity, in GB
         * @type {number || null}
         */
        this.TotalUsedCapacity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCapacity = 'TotalCapacity' in params ? params.TotalCapacity : null;
        this.TotalFreeCapacity = 'TotalFreeCapacity' in params ? params.TotalFreeCapacity : null;
        this.TotalUsedCapacity = 'TotalUsedCapacity' in params ? params.TotalUsedCapacity : null;

    }
}

/**
 * VPN gateway traffic monitoring data
 * @class
 */
class VpngwBandwidthData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Outbound bandwidth traffic 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {OutBandwidth || null}
         */
        this.OutBandwidth = null;

        /**
         * Inbound bandwidth traffic
         * @type {InBandwidth || null}
         */
        this.InBandwidth = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.OutBandwidth) {
            let obj = new OutBandwidth();
            obj.deserialize(params.OutBandwidth)
            this.OutBandwidth = obj;
        }

        if (params.InBandwidth) {
            let obj = new InBandwidth();
            obj.deserialize(params.InBandwidth)
            this.InBandwidth = obj;
        }

    }
}

/**
 * ModifySiteDeviceInfo request structure.
 * @class
 */
class ModifySiteDeviceInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Equipment room ID
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * You are using optical fiber type to connect the CDC device to the network Single-mode or multi-mode fibers are available.
         * @type {string || null}
         */
        this.FiberType = null;

        /**
         * Optical standard used to connect the CDC device to the network This field depends on the uplink speed, optical fiber type, and distance to upstream equipment.
         * @type {string || null}
         */
        this.OpticalStandard = null;

        /**
         * Type of power connector
         * @type {string || null}
         */
        this.PowerConnectors = null;

        /**
         * Whether power is supplied from above or below the rack
         * @type {string || null}
         */
        this.PowerFeedDrop = null;

        /**
         * Maximum weight capacity (KG)
         * @type {number || null}
         */
        this.MaxWeight = null;

        /**
         * Power consumption (KW)
         * @type {number || null}
         */
        this.PowerDrawKva = null;

        /**
         * Uplink speed from the network to Tencent Cloud Region
         * @type {number || null}
         */
        this.UplinkSpeedGbps = null;

        /**
         * Number of uplinks used by each CDC device (2 devices per rack) when connected to the network
         * @type {number || null}
         */
        this.UplinkCount = null;

        /**
         * Whether the following environmental conditions are met: 
1. There are no material requirements or the acceptance standard on site that will affect the delivery and installation of the CDC device. 
2. The following conditions are met for finalized rack positions: 
Temperature ranges from 41 to 104°F (5 to 40°C). 
Humidity ranges from 10°F (-12°C) to 70°F (21°C) and relative humidity ranges from 8% RH to 80% RH. 
Air flows from front to back at the rack position and there is sufficient air in CFM (cubic feet per minute). The air quantity in CFM must be 145.8 times the power consumption (in KVA) of CDC.
         * @type {boolean || null}
         */
        this.ConditionRequirement = null;

        /**
         * Whether the following dimension conditions are met: 
Your loading dock can accommodate one rack container (H x W x D = 94" x 54" x 48"). 
You can provide a clear route from the delivery point of your rack (H x W x D = 80" x 24" x 48") to its final installation location. You should consider platforms, corridors, doors, turns, ramps, freight elevators as well as other access restrictions when measuring the depth. 
There shall be a 48" or greater front clearance and a 24" or greater rear clearance where the CDC is finally installed.
         * @type {boolean || null}
         */
        this.DimensionRequirement = null;

        /**
         * Whether redundant upstream equipment (switch or router) is provided so that both network devices can be connected to the network.
         * @type {boolean || null}
         */
        this.RedundantNetworking = null;

        /**
         * Whether you need help from Tencent Cloud for rack installation?
         * @type {boolean || null}
         */
        this.NeedHelp = null;

        /**
         * Whether there is power redundancy?
         * @type {boolean || null}
         */
        this.RedundantPower = null;

        /**
         * Whether there is an upstream circuit breaker?
         * @type {boolean || null}
         */
        this.BreakerRequirement = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.FiberType = 'FiberType' in params ? params.FiberType : null;
        this.OpticalStandard = 'OpticalStandard' in params ? params.OpticalStandard : null;
        this.PowerConnectors = 'PowerConnectors' in params ? params.PowerConnectors : null;
        this.PowerFeedDrop = 'PowerFeedDrop' in params ? params.PowerFeedDrop : null;
        this.MaxWeight = 'MaxWeight' in params ? params.MaxWeight : null;
        this.PowerDrawKva = 'PowerDrawKva' in params ? params.PowerDrawKva : null;
        this.UplinkSpeedGbps = 'UplinkSpeedGbps' in params ? params.UplinkSpeedGbps : null;
        this.UplinkCount = 'UplinkCount' in params ? params.UplinkCount : null;
        this.ConditionRequirement = 'ConditionRequirement' in params ? params.ConditionRequirement : null;
        this.DimensionRequirement = 'DimensionRequirement' in params ? params.DimensionRequirement : null;
        this.RedundantNetworking = 'RedundantNetworking' in params ? params.RedundantNetworking : null;
        this.NeedHelp = 'NeedHelp' in params ? params.NeedHelp : null;
        this.RedundantPower = 'RedundantPower' in params ? params.RedundantPower : null;
        this.BreakerRequirement = 'BreakerRequirement' in params ? params.BreakerRequirement : null;

    }
}

/**
 * DescribeDedicatedClusterHostStatistics response structure.
 * @class
 */
class DescribeDedicatedClusterHostStatisticsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of statistic information of the cluster host
         * @type {Array.<HostStatistic> || null}
         */
        this.HostStatisticSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HostStatisticSet) {
            this.HostStatisticSet = new Array();
            for (let z in params.HostStatisticSet) {
                let obj = new HostStatistic();
                obj.deserialize(params.HostStatisticSet[z]);
                this.HostStatisticSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Customer site information
 * @class
 */
class Site extends  AbstractModel {
    constructor(){
        super();

        /**
         * Site name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Site id
         * @type {string || null}
         */
        this.SiteId = null;

        /**
         * Site description 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Site creation time
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SiteId = 'SiteId' in params ? params.SiteId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * DescribeDedicatedClusterTypes request structure.
 * @class
 */
class DescribeDedicatedClusterTypesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name of fuzzy matching CDC configuration
         * @type {string || null}
         */
        this.Name = null;

        /**
         * List of CDC configuration ids to be queried
         * @type {Array.<string> || null}
         */
        this.DedicatedClusterTypeIds = null;

        /**
         * Offset, 0 by default For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned pieces, 20 by default and can be up to 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Whether to query only the computing type?
         * @type {boolean || null}
         */
        this.IsCompute = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.DedicatedClusterTypeIds = 'DedicatedClusterTypeIds' in params ? params.DedicatedClusterTypeIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.IsCompute = 'IsCompute' in params ? params.IsCompute : null;

    }
}

/**
 * DescribeDedicatedClusterOrders response structure.
 * @class
 */
class DescribeDedicatedClusterOrdersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of CDC orders
         * @type {Array.<DedicatedClusterOrder> || null}
         */
        this.DedicatedClusterOrderSet = null;

        /**
         * Total number of CDC orders that meet the conditions
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DedicatedClusterOrderSet) {
            this.DedicatedClusterOrderSet = new Array();
            for (let z in params.DedicatedClusterOrderSet) {
                let obj = new DedicatedClusterOrder();
                obj.deserialize(params.DedicatedClusterOrderSet[z]);
                this.DedicatedClusterOrderSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDedicatedClusterHostStatistics request structure.
 * @class
 */
class DescribeDedicatedClusterHostStatisticsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queried CDC id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Host id
         * @type {string || null}
         */
        this.HostId = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Time range accuracy, 1 min/5 min
         * @type {string || null}
         */
        this.Period = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.HostId = 'HostId' in params ? params.HostId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Period = 'Period' in params ? params.Period : null;

    }
}

/**
 * Outbound bandwidth data
 * @class
 */
class OutBandwidth extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Timestamps = null;

        /**
         * Time-specific value 
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<number> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamps = 'Timestamps' in params ? params.Timestamps : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * DescribeDedicatedClusterOverview request structure.
 * @class
 */
class DescribeDedicatedClusterOverviewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster id
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

    }
}

/**
 * DeleteDedicatedClusters request structure.
 * @class
 */
class DeleteDedicatedClustersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC id to be deleted
         * @type {Array.<string> || null}
         */
        this.DedicatedClusterIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DedicatedClusterIds = 'DedicatedClusterIds' in params ? params.DedicatedClusterIds : null;

    }
}

/**
 * DeleteDedicatedClusters response structure.
 * @class
 */
class DeleteDedicatedClustersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    DescribeDedicatedClusterInstanceTypesResponse: DescribeDedicatedClusterInstanceTypesResponse,
    DescribeDedicatedClustersRequest: DescribeDedicatedClustersRequest,
    DescribeDedicatedClusterTypesResponse: DescribeDedicatedClusterTypesResponse,
    DedicatedClusterInstanceType: DedicatedClusterInstanceType,
    DedicatedClusterType: DedicatedClusterType,
    DeleteSitesRequest: DeleteSitesRequest,
    CosInfo: CosInfo,
    ZoneInfo: ZoneInfo,
    DescribeDedicatedClusterOverviewResponse: DescribeDedicatedClusterOverviewResponse,
    DescribeSitesRequest: DescribeSitesRequest,
    HostInfo: HostInfo,
    CreateSiteResponse: CreateSiteResponse,
    DescribeDedicatedSupportedZonesResponse: DescribeDedicatedSupportedZonesResponse,
    ModifySiteInfoResponse: ModifySiteInfoResponse,
    CreateDedicatedClusterOrderRequest: CreateDedicatedClusterOrderRequest,
    ModifyOrderStatusRequest: ModifyOrderStatusRequest,
    DedicatedClusterOrderItem: DedicatedClusterOrderItem,
    CreateSiteRequest: CreateSiteRequest,
    DescribeDedicatedSupportedZonesRequest: DescribeDedicatedSupportedZonesRequest,
    DedicatedClusterTypeInfo: DedicatedClusterTypeInfo,
    ModifyOrderStatusResponse: ModifyOrderStatusResponse,
    InBandwidth: InBandwidth,
    DescribeDedicatedClusterCosCapacityRequest: DescribeDedicatedClusterCosCapacityRequest,
    DescribeSitesResponse: DescribeSitesResponse,
    DescribeSitesDetailRequest: DescribeSitesDetailRequest,
    DetailData: DetailData,
    DedicatedClusterOrder: DedicatedClusterOrder,
    ModifyDedicatedClusterInfoRequest: ModifyDedicatedClusterInfoRequest,
    DescribeDedicatedClusterHostsRequest: DescribeDedicatedClusterHostsRequest,
    CreateDedicatedClusterOrderResponse: CreateDedicatedClusterOrderResponse,
    DescribeDedicatedClusterCosCapacityResponse: DescribeDedicatedClusterCosCapacityResponse,
    RegionZoneInfo: RegionZoneInfo,
    CreateDedicatedClusterResponse: CreateDedicatedClusterResponse,
    DedicatedCluster: DedicatedCluster,
    DescribeSitesDetailResponse: DescribeSitesDetailResponse,
    DescribeDedicatedClusterOrdersRequest: DescribeDedicatedClusterOrdersRequest,
    DescribeDedicatedClustersResponse: DescribeDedicatedClustersResponse,
    HostStatistic: HostStatistic,
    HostDetailInfo: HostDetailInfo,
    CbsInfo: CbsInfo,
    ModifySiteDeviceInfoResponse: ModifySiteDeviceInfoResponse,
    CreateDedicatedClusterRequest: CreateDedicatedClusterRequest,
    DescribeDedicatedClusterHostsResponse: DescribeDedicatedClusterHostsResponse,
    LocalNetInfo: LocalNetInfo,
    DescribeDedicatedClusterInstanceTypesRequest: DescribeDedicatedClusterInstanceTypesRequest,
    ModifyDedicatedClusterInfoResponse: ModifyDedicatedClusterInfoResponse,
    ModifySiteInfoRequest: ModifySiteInfoRequest,
    SiteDetail: SiteDetail,
    DeleteSitesResponse: DeleteSitesResponse,
    CosCapacity: CosCapacity,
    VpngwBandwidthData: VpngwBandwidthData,
    ModifySiteDeviceInfoRequest: ModifySiteDeviceInfoRequest,
    DescribeDedicatedClusterHostStatisticsResponse: DescribeDedicatedClusterHostStatisticsResponse,
    Site: Site,
    DescribeDedicatedClusterTypesRequest: DescribeDedicatedClusterTypesRequest,
    DescribeDedicatedClusterOrdersResponse: DescribeDedicatedClusterOrdersResponse,
    DescribeDedicatedClusterHostStatisticsRequest: DescribeDedicatedClusterHostStatisticsRequest,
    OutBandwidth: OutBandwidth,
    DescribeDedicatedClusterOverviewRequest: DescribeDedicatedClusterOverviewRequest,
    DeleteDedicatedClustersRequest: DeleteDedicatedClustersRequest,
    DeleteDedicatedClustersResponse: DeleteDedicatedClustersResponse,

}
